package Tree;

/**
 * File Name: ArrTreeNode
 * Date: 2020-07-23 16:01
 * Author: liangling
 * Description 数组存储二叉树的遍历
 */
public class ArrTreeNode {

    private int [] arr;

    public ArrTreeNode(int[] arr) {
        this.arr = arr;
    }

    /**
     *存储二叉树的前序遍历
     * @param index 起始数组下标
     */

    public void preArr(int index){
        //如果数组为kong,或者arr.length=0
        if(null == arr || arr.length==0){
            System.out.println("数组为空不能遍历");
        }
        //输出当前这个元素
        System.out.println(arr[index]);
        //向左递归遍历
        if ((index*2+1)<arr.length){
            preArr(2*index+1);
        }
        //向右递归遍历
        if (index*2+2<arr.length){
            preArr(2*index+2);
        }

    }

    /**
     * 数组存储二叉树中序遍历
     * @param index
     */
    public void midArr(int index){
        //遍历左子树
        if ((2*index)+1<arr.length){
            midArr((2*index)+1);
        }
        //根节点
        System.out.println(arr[index]);

        //右节点
        if ((2+index)+2<arr.length){
            midArr((2*index)+2);
        }
    }

    /**
     * 数组存储二叉树后序遍历数组
     * @param index
     */
    public void lastArr(int index){

        if (null == arr || arr.length==0){
            System.out.println("数组为空不能遍历");
        }

        //遍历左子节点
        if ((index*2)+1<arr.length){
            lastArr((index*2)+1);
        }

        //遍历右子节点
        if ((index*2)+2<arr.length){
            lastArr((index*2)+2);
        }
        //输出根节点
        System.out.println(arr[index]);

    }
}
